const fs = require("fs");
const path = require("path");
const { Readable } = require("stream");
class MyReadStream extends Readable {
  constructor() {
    super();
    this.index = 0;
  }
  _read() {
    // fs.open, fs.close
    if (this.index < 10) {
      this.push(this.index++ + "");
    } else {
      this.push(null);
    }
  }
}
let mrs = new MyReadStream();
mrs.on("data", function (chunk) {
  console.log(chunk);
});
mrs.on("end", function () {
  console.log("end");
});
// const rs = fs.createReadStream(path.resolve(__dirname, "copy.txt"), {
//   highWaterMark: 4,
// });

// rs.on("data", function () {
//   console.log(data);
// });

// 1.底层会创建一个可读流的实例
// 2.底层对于文件而言用的就是文件模块
// 3.我们创建的可读流，会继承Readable这个类 (接口)
// 4.底层最终会调用一个方法 push -> addChunk() 会将数据 通过emit('data') 发射出来

// 底层会调用ReadStream.prototype._read -> fs.read() -> Readable.push() -> addChunk -> emit

// Readable.read -> ReadStream._read

// class A {
//   eat() {
//     this.drink();
//   }
// }
// class B extends A {
//   drink() {
//     console.log("drink");
//   }
// }

// let b = new B();
// b.eat();
